/*
 * Copyright 2011 LMAX Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.bfxy.disruptor.common.consume;

import java.util.concurrent.Executor;

import com.bfxy.disruptor.common.balance.Sequence;
import com.bfxy.disruptor.common.balance.SequenceBarrier;
import com.bfxy.disruptor.common.event.EventHandler;

public class ConsumeInfo<T> implements IConsumerInfo {
	private final EventConsumer eventprocessor;
	private final EventHandler<? super T> handler;
	private final SequenceBarrier barrier;
	private boolean endOfChain = true;

	public ConsumeInfo(final EventConsumer eventprocessor, final EventHandler<? super T> handler,
			final SequenceBarrier barrier) {
		this.eventprocessor = eventprocessor;
		this.handler = handler;
		this.barrier = barrier;
	}

	public EventConsumer getEventProcessor() {
		return eventprocessor;
	}

	@Override
	public Sequence[] getSequences() {
		return new Sequence[] { eventprocessor.getSequence() };
	}

	public EventHandler<? super T> getHandler() {
		return handler;
	}

	@Override
	public SequenceBarrier getBarrier() {
		return barrier;
	}

	@Override
	public boolean isEndOfChain() {
		return endOfChain;
	}

	@Override
	public void start(final Executor executor) {
		executor.execute(eventprocessor);
	}

	@Override
	public void halt() {
		eventprocessor.halt();
	}

	@Override
	public void markAsUsedInBarrier() {
		endOfChain = false;
	}

	@Override
	public boolean isRunning() {
		return eventprocessor.isRunning();
	}
}
